MongoDB 在社群, 非營利環境使用是免費的,而我一律推薦使用 docker 來操作,一來省掉一堆平台相容性以及安裝上遇到的問題,二來大家都會是一樣的起始狀態,三來是弄壞了也不用擔心重裝麻煩之類的。所以本篇以下不會介紹到任何os獨有安裝方式,僅使用 docker 而已,如果對 docker 熟稔的朋友就可以直接跳過本篇了。
Application 安裝模式會因為各種os有所不同,這邊不會一一介紹,有需要的可以直接參考官網 各個平台安裝 MongoDB 方法。我要用的是以 docker 方式來啟動 MongoDB。(開始前請先安裝 docker)
首先直接從 docker hub 拉取最新的映像檔(image)
docker pull mongo:latest
有指定的版本號或 tag 也可以去 docker hub 查看
➜ / docker pull mongo:latest
latest: Pulling from library/mongo
16ec32c2132b: Already exists
81447d2c233f: Pull complete
Digest: sha256:93ea50c5f15f9814870b3509449d327c5bc4d38f2b17c20acec528472811a723
Status: Downloaded newer image for mongo:latest
docker.io/library/mongo:latest
➜ /
這樣就成功版最新的版本映像檔拉回本機囉!我們還是先確認 image 是否存在
docker image ls
➜ / docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
mongo latest 269b735e72cb 3 weeks ago 682MB
看到 tag 欄位,latest
畢竟是 latest
,我們還是不知道是哪一個版本,如果想看拉回來的 MongoDB 是什麼版本,可以使用 dk image inspect [IMAGE ID]
來查看細節。
接著看怎麼啟動 MongoDB 吧!
docker run -d mongo
我們再輸入 docker ps ls
來查看有哪些正在執行的 docker
➜ / docker run -d mongo
11ef37ced7a9797e9ba9bb307232ad340533f6277801203b009b2fbb6d1b3daa
➜ / dk ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11ef37ced7a9 mongo "docker-entrypoint.s…" 2 seconds ago Up 1 second 27017/tcp elegant_lamport
➜ /
關於這個 -d
參數千萬不能漏掉,因為沒加上去的話就會被佔用一個 terminal 視窗,要多開一個會很麻煩(網路梗),-d 是背景執行的意思。
如上面 terminal 結果,實務上我們還會多給予一些設定,例如 port 與 名稱,這樣才能協助我們從眾多 docker 執行體中找到 mongoDB。
預設的 MongoDB port 是 27017,我們把 port 號改為 27666,同時名字也改為辨識度高一點的的。
dk run -d -p 27666:27017 --name mongoTest mongo
結果
➜ / dk ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d48d1c66439 mongo "docker-entrypoint.s…" 7 seconds ago Up 5 seconds 0.0.0.0:27666->27017/tcp, :::27666->27017/tcp mongoTest
我們使用 docker ps
指令列出目前正在執行的容器,可以透過docker stop
指令來關閉,帶入的可以是 CONTAINER ID
或 NAMES
,我自己是比較喜歡用 ID,因為不用完整輸入名稱,只要前幾碼而已。
例如上面的 CONTAINER ID: 9d48d1c66439
, NAMES: mongoTest
,你可以用以下方式輸入:
docker stop mongoTest
docker stop 9d48d1c66439
docker stop 9d4
(可以更少,但避免誤停,還是多個幾碼吧)現在你已經會使用 docker 運作 MongoDB 了,那為什麼還需要 docker-compose?因為科技始終來自於惰性,人是很懶惰打一堆指令的,於是我們把相關設定都直接寫在 yaml 內,我只要記得 docker-compose up
& docker-compose down
就好了!(其實我更懶,加上 alias,只需要 dc up
& dc down
)
首先在專案底下建立一個檔案名字是 docker-compose.yml
,記得名字要對,內容就照著以下打即可
version: '3'
services:
mongoTest:
image: mongo
container_name: mongoTest
ports:
- "27666:27017"
entrypoint: [ "/usr/bin/mongod","--bind_ip", "localhost"]
接著在路徑資料夾輸入 docker-compose up
就可以看到 MongoDB 啟動囉!
前面有提到,使用 docker 的好處是每次啟動都像新的一樣,我所需要使用的初始資料都會準備在一個初始用的腳本內,啟動時順手把資料寫進資料庫。
那如果想保留資料的話該怎麼做?
其實也很簡單,在 yml 內新增 volumes 設定。完整如下:
version: '3'
services:
mongo_test:
image: mongo
container_name: mongo_test
ports:
- "27666:27017"
volumes:
- "~/Desktop/mount-mongo-data:/data/db"
: 前面的路徑就是實體位置,你也可以修改成你想儲存的位置。
所以我是將 MongoDB 的資料儲存在 ~/Desktop/mount-mongo-data
底下喔!
學會如何使用 docker 啟動 MongoDB 後,接下來就是如何連線了!請期待明天吧!
本系列文章會同步發表於我個人的部落格 Pie Note